package cc.facesign.admin.service;

import cc.facesign.admin.bean.DeptTree;
import cc.facesign.admin.bean.TblDept;
import cc.facesign.admin.bean.vo.DeptVo;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Set;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author testjava
 * @since 2022-05-06
 */
public interface TblDeptService extends IService<TblDept> {

    /**
     * 根据用户id获取root部门
     * @param id
     * @return
     */
    TblDept getRootByUserId(String id);

    /**
     * 获取部门vo信息
     * @param id 部门id
     * @return
     */
    DeptVo getInfoById(String id);

    /**
     * 获取所有root部门
     * @return
     */
    List<TblDept> getRootList();

    /**
     * 根据root部门id，获取所有子部门
     * @param id 根部门id
     * @return
     */
    List<DeptVo> getListByRootId(String id);


    /**
     * 根据部门id获取子部门树
     * @param id 部门id
     * @return
     */
    DeptTree getTreeByDeptId(String id);

    /**
     * 根据部门id获取子部门列表
     * @param id 部门id
     * @return
     */
    List<DeptVo> getChildListByDeptId(String id);


    /**
     * 根据id批量获取部门
     * @param ids 部门id
     * @return
     */
    List<DeptVo> getInfoBatch(List<String> ids);


    /**
     * 添加子部门
     * @param vo
     */
    String addChild(DeptVo vo);

    /**
     * 获取所有子部门的id set（包括当前的）
     * @param id 部门id
     * @return
     */
    Set<String> getChildIdSetByDeptId(String id);

    /**
     * 添加跟部门
     * @param vo
     * @return
     */
    String addRoot(DeptVo vo);


    /**
     * 通过部门名和根部门名查部门id
     * @param deptName 部门名
     * @param rootDeptName 跟部门名
     * @return
     */
    String getIdByDeptNameAndRootName(String deptName, String rootDeptName);


    /**
     * 获取该部门的上级部门
     * 如果是admin部门，则返回本身
     * @Param deptId
     */
    DeptVo getPDeptVo(String deptId);

    /**
     * 获取root部门id
     * @param deptId 部门id
     * @return
     */
    String getRid(String deptId);

    /**
     * 比较部门层级
     * @param deptId1 第一个部门id
     * @param deptId2 第二个部门id
     * @return 1>2返回1,1==2返回0,1<2返回-1
     */
    int compareGrade(String deptId1, String deptId2);
}
